// core dump 的核心转储功能的实践

#include <iostream>

// int main()
// {
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;

//     //这里发生一个除0错误 , 然后如果有 core dump 就会很方便事后调试 !
//     int a = 10;
//     a /= 0;

//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//     std::cout << "我是进行事后调试的 , 我的错误藏的比较深 !" << std::endl;
//      return 0;
// }


///// 创建子进程获取退出信息

#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
int main()
{
    pid_t id = fork();
    if(id == 0 )
    {
        //child 
        std::cout << "我是子进程 , pid : " << getpid() << std::endl;
        exit(0);
    }

    //父 
    int wstatus = 0;
    pid_t n = waitpid(id , &wstatus , 0);
    if(n > 0)
    {
        printf("signal: %d, exit code: %d, core dump: %d\n",
         (wstatus & 0x7F), (wstatus >> 8) & 0xFF, (wstatus >> 7) & 0x1);
    }
    return 0;
}